Use g_string_assign to avoid issues with assigning GString's internal
buffer back to the same string. This can happen when no translations are
available and _gtk_builder_parser_translate returns back the same
pointer that was passed in.
This fixes a regression from commit
e9f182e37a7f6e2dc339054841a3c9f930f
that caused GtkComboBoxText <items> from GtkBuilder to show up empty if
no translations are available.
https://bugzilla.gnome.org/show_bug.cgi?id=700629
if (prop_info->translatable && prop_info->text->len)
{
- prop_info->data = g_strdup (_gtk_builder_parser_translate (data->domain,
- prop_info->context,
- prop_info->text->str));
- g_string_free (prop_info->text, TRUE);
- }
- else
- {
- prop_info->data = g_string_free (prop_info->text, FALSE);
+ const gchar *translated;
+
+ translated = _gtk_builder_parser_translate (data->domain,
+ prop_info->context,
+ prop_info->text->str);
+ g_string_assign (prop_info->text, translated);
}
+ prop_info->data = g_string_free (prop_info->text, FALSE);
+
object_info->properties =
g_slist_prepend (object_info->properties, prop_info);
}
translated = _gtk_builder_parser_translate (domain,
parser_data->context,
parser_data->string->str);
- g_string_set_size (parser_data->string, 0);
- g_string_append (parser_data->string, translated);
+ g_string_assign (parser_data->string, translated);
}
if (parser_data->cell_prop_name)
translated = _gtk_builder_parser_translate (data->domain,
data->context,
data->string->str);
- g_string_set_size (data->string, 0);
- g_string_append (data->string, translated);
+ g_string_assign (data->string, translated);
}
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (data->object), data->id, data->string->str);
/* translate the string */
if (parser_data->string->len && parser_data->translatable)
{
- gchar *translated;
+ const gchar *translated;
const gchar *domain;
domain = gtk_builder_get_translation_domain (parser_data->builder);
- translated = g_strdup (_gtk_builder_parser_translate (domain,
- parser_data->context,
- parser_data->string->str));
- g_string_set_size (parser_data->string, 0);
- g_string_append (parser_data->string, translated);
- g_free (translated);
+ translated = _gtk_builder_parser_translate (domain,
+ parser_data->context,
+ parser_data->string->str);
+ g_string_assign (parser_data->string, translated);
}
if (parser_data->child_prop_name)